/*
 * Partida.cpp
 *
 *  Created on: 11/11/2012
 *      Author: Ignacio Galvez
 */
#include "Partida.h"
#include <typeinfo>
#include <iostream>
#include <iomanip>
Partida::Partida(double timeout, double tiempoActual):pausa(true), 
timeout(timeout), tiempoActual(tiempoActual) {}

void Partida::iniciar() {}

void Partida::pausar() {}

void Partida::reanudar() {}

bool Partida::estaEnPausa() {
	return pausa;
}

void Partida::agregar(MonticuloDeHuevos* monticuloDeHuevos) {
	this->monticuloDeHuevos = monticuloDeHuevos;
}

void Partida::agregar(std::list<Huevo*> huevos) {
	std::list<Huevo*>::iterator it;
	huevosBlancos.clear();
	huevosCodorniz.clear();
	huevosPoche.clear();
	huevosReloj.clear();
	for (it = huevos.begin(); it != huevos.end(); ++it) {
		if (*it != NULL) {
			HuevoBlanco* huevoBlanco;
			huevoBlanco = dynamic_cast<HuevoBlanco*>(*it);
			if (huevoBlanco) huevosBlancos.push_back(*huevoBlanco);
	
			HuevoCodorniz* huevoCodorniz;
			huevoCodorniz = dynamic_cast<HuevoCodorniz*>(*it);
			if (huevoCodorniz) huevosCodorniz.push_back(*huevoCodorniz);
		
			HuevoPoche*	huevoPoche;
			huevoPoche = dynamic_cast<HuevoPoche*>(*it);
			if (huevoPoche)  huevosPoche.push_back(*huevoPoche);
		
			HuevoReloj*	huevoReloj;
			huevoReloj = dynamic_cast<HuevoReloj*>(*it);
			if (huevoReloj) huevosReloj.push_back(*huevoReloj);
		}		
	}
	// std::list<Huevo*>::iterator it;
	// for (it = huevos.begin(); it != huevos.end(); ++it) {
	// 	HuevoBlanco* huevoBlanco;
	// 	if (typeid(*huevoBlanco) == typeid(**it)) {
	// 	huevoBlanco = *it;
	// 	huevosBlancos.push_back(*huevoBlanco);
	// 	}
	
	// 	HuevoCodorniz* huevoCodorniz;
	// 	if (typeid(*huevoCodorniz) == typeid(**it)) {
	// 	huevoCodorniz = *it;
	// 	huevosCodorniz.push_back(*huevoCodorniz);
	// 	}
		
	// 	HuevoPoche*	huevoPoche;
	// 	if (typeid(*huevoPoche) == typeid(**it)) {
	// 	huevoPoche = *it;
	// 	huevosPoche.push_back(*huevoPoche);
	// 	}
		
	// 	HuevoReloj*	huevoReloj;
	// 	if (typeid(*huevoReloj) == typeid(**it)) {
	// 	huevoReloj = *it;
	// 	huevosReloj.push_back(*huevoReloj);
	// 	}		
	// }
}

void Partida::agregar(std::list<Caja*> cajas) {
std::list<Caja*>::iterator it;
	cajasMetal.clear();
	cajasMadera.clear();
	cajasDeVidrio.clear();
	for (it = cajas.begin(); it != cajas.end(); ++it) {
		if (*it != NULL) {
			CajaMetal* cajaMetal;
			cajaMetal = dynamic_cast<CajaMetal*>(*it);
			if (cajaMetal) cajasMetal.push_back(*cajaMetal);
			CajaMadera* cajaMadera;
			cajaMadera = dynamic_cast<CajaMadera*>(*it);
			if (cajaMadera) cajasMadera.push_back(*cajaMadera);
			CajaDeVidrio* cajaDeVidrio;
			cajaDeVidrio = dynamic_cast<CajaDeVidrio*>(*it);
			if (cajaDeVidrio) cajasDeVidrio.push_back(*cajaDeVidrio);		
		}
	}	
}

void Partida::agregar(std::list<Bonificable*> bonificables) {
std::list<Bonificable*>::iterator it;
bananas.clear();
cerezas.clear();
manzanas.clear();
	for (it = bonificables.begin(); it != bonificables.end(); ++it) {
		if (*it != NULL) {
			Banana* banana;
			banana = dynamic_cast<Banana*>(*it);
			if (banana)	bananas.push_back(*banana);
			Cereza* cereza;
			cereza = dynamic_cast<Cereza*>(*it);
			if (cereza)	cerezas.push_back(*cereza);
			Manzana* manzana;
			manzana = dynamic_cast<Manzana*>(*it);
			if (manzana) manzanas.push_back(*manzana);
		}
	}
}

void Partida::agregar(std::list<Pajaro*> pajaros) {
std::list<Pajaro*>::iterator it;
pajarosRojos.clear();
pajarosVerdes.clear();
pajarosAzules.clear();
	for (it = pajaros.begin(); it != pajaros.end(); ++it) {
		if (*it != NULL) {
			PajaroRojo* pajaroRojo;
			pajaroRojo = dynamic_cast<PajaroRojo*>(*it);
			if (pajaroRojo)	pajarosRojos.push_back(*pajaroRojo);
			PajaroAzul* pajaroAzul;
			pajaroAzul = dynamic_cast<PajaroAzul*>(*it);
			if (pajaroAzul) pajarosAzules.push_back(*pajaroAzul);
			PajaroVerde* pajaroVerde;
			pajaroVerde = dynamic_cast<PajaroVerde*>(*it);
			if (pajaroVerde) pajarosVerdes.push_back(*pajaroVerde);
		}
	}
	// std::list<Pajaro*>::iterator it;
	// for (it = pajaros.begin(); it != pajaros.end(); ++it) {
	// 	PajaroRojo* pajaroRojo;
	// 	if (typeid(*pajaroRojo) == typeid(**it)) {
	// 	pajaroRojo = *it;
	// 	pajarosRojos.push_back(*pajaroRojo);
	// 	}
	// 	PajaroAzul* pajaroAzul;
	// 	if (typeid(*pajaroAzul) == typeid(**it)) {
	// 	pajaroAzul = *it;
	// 	pajarosAzules.push_back(*pajaroAzul);
	// 	}
	// 	PajaroVerde* pajaroVerde;
	// 	if (typeid(*pajaroVerde) == typeid(**it)) {
	// 	pajaroVerde = *it;
	// 	pajarosVerdes.push_back(*pajaroVerde);
	// 	}
	// }
}

void Partida::agregar(std::list<Cerdito*> cerditos) {
	std::list<Cerdito*>::iterator it;
	this->cerditos.clear();
	for (it = cerditos.begin(); it != cerditos.end(); ++it) {
		this->cerditos.push_back(**it);
	}
}

std::vector<Dibujable*> Partida::getDibujables() {
	std::list<HuevoBlanco>::iterator itHB;
	std::list<HuevoCodorniz>::iterator itHC;
	std::list<HuevoPoche>::iterator itHP;
	std::list<HuevoReloj>::iterator itHR;
	std::list<PajaroRojo>::iterator itPR;
	std::list<PajaroAzul>::iterator itPA;
	std::list<PajaroVerde>::iterator itPV;
	std::list<CajaMetal>::iterator itCMT;
	std::list<CajaMadera>::iterator itCMD;
	std::list<CajaDeVidrio>::iterator itCV;
	std::list<Cerdito>::iterator itCD;
	std::list<Manzana>::iterator itMZ;
	std::list<Cereza>::iterator itCR;
	std::list<Banana>::iterator itBn;
	std::vector<Dibujable*> dibujables;

	for (itHB = huevosBlancos.begin();itHB != huevosBlancos.end(); ++ itHB) {
		dibujables.push_back(&(*itHB));
	}
	for (itHC = huevosCodorniz.begin();itHC != huevosCodorniz.end(); ++ itHC) {
		dibujables.push_back(&(*itHC));
	}
	for (itHP = huevosPoche.begin();itHP != huevosPoche.end(); ++ itHP) {
		dibujables.push_back(&(*itHB));
	}
	for (itHR = huevosReloj.begin();itHR != huevosReloj.end(); ++ itHR) {
		dibujables.push_back(&(*itHR));
	}
	for (itPR = pajarosRojos.begin();itPR != pajarosRojos.end(); ++ itPR) {
		dibujables.push_back(&(*itPR));
	}
	for (itPA = pajarosAzules.begin();itPA != pajarosAzules.end(); ++ itPA) {
		dibujables.push_back(&(*itPA));
	}
	for (itPV = pajarosVerdes.begin();itPV != pajarosVerdes.end(); ++ itPV) {
		dibujables.push_back(&(*itPV));
	}
	for (itCMT = cajasMetal.begin();itCMT != cajasMetal.end(); ++ itCMT) {
		dibujables.push_back(&(*itCMT));
	}
	for (itCMD = cajasMadera.begin();itCMD != cajasMadera.end(); ++ itCMD) {
		dibujables.push_back(&(*itCMD));
	}
	for (itCV = cajasDeVidrio.begin();itCV != cajasDeVidrio.end(); ++ itCV) {
		dibujables.push_back(&(*itCV));
	}
	for (itCD = cerditos.begin();itCD != cerditos.end(); ++ itCD) {
		dibujables.push_back(&(*itCD));
	}
	for (itMZ = manzanas.begin();itMZ != manzanas.end(); ++ itMZ) {
		dibujables.push_back(&(*itMZ));
	}

	for (itCR = cerezas.begin();itCR != cerezas.end(); ++ itCR) {
		dibujables.push_back(&(*itCR));
	}
	for (itBn = bananas.begin();itBn != bananas.end(); ++ itBn) {
		dibujables.push_back(&(*itBn));
	}
	dibujables.push_back(monticuloDeHuevos);
	monticuloDeHuevos = NULL;
	return dibujables;
}


Partida::~Partida() {}

